package com.lingxinst.farm.base.ui

import android.os.Bundle
import android.view.Menu
import android.view.View
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import com.orhanobut.logger.Logger
import com.therouter.TheRouter

/**
 * @description:
 * @author: bailing
 * @datetime: 2025/6/1 17:42
 **/
abstract class BaseActivity() : AppCompatActivity(), IBaseView {

    lateinit var tag: String

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        TheRouter.inject(this)
        tag = initTag()
        Logger.e("onCreate: $tag")
        initParam()

        enableEdgeToEdge()

        initVM()

        getToolBar() ?.let {
            setUpToolbar(it)
        }

        initUIView(savedInstanceState)

        setObserver()

    }




    abstract fun initTag(): String


    override fun initParam() {

    }

    /**
     * 需要用到ViewMode，需要复写该方法
     */
    open fun initVM() {

    }

    fun getToolBar(): Toolbar? {
        return null
    }

    override fun setUpToolbar(toolbar: Toolbar) {
        // Setup toolbar :  设置为ActionBar
        setSupportActionBar(toolbar)
        // 启用返回按钮
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        supportActionBar?.setDisplayShowTitleEnabled(false)
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        return super.onCreateOptionsMenu(menu)
    }


    abstract fun initUIView(savedInstanceState: Bundle?)

    override fun setObserver() {}


    //This function is called when the back button is pressed on the activity
    fun onActivityBack(view: View) {
        //This line finishes the current activity
        this.finish()
    }

    /**
     *  当 Activity 变得可见时，onStart() 方法被调用。这标志着 Activity 即将开始与用户交互。
     */
    override fun onStart() {
        super.onStart()
        Logger.e("onStart: $tag")
    }

    /**
     * 当 Activity 完全可见并处于前台（用户可以与之交互），onResume() 方法被调用。
     * 这是用户与 Activity 交互的黄金时期。
     */
    override fun onResume() {
        super.onResume()
        Logger.e("onResume: $tag")
    }

    /**
     * 当系统准备去启动另一个 Activity 时，onPause() 方法被调用。
     * 在这个阶段，你应该进行一些清理工作（如停止动画），但不推荐执行耗时操作，因为此时 Activity 即将进入非交互状态。
     */
    override fun onPause() {
        super.onPause()
        Logger.e("onPause: $tag")
    }

    /**
     * 当 Activity 不再可见时（完全隐藏），onStop() 方法被调用。这通常发生在用户切换到另一个应用时。
     */
    override fun onStop() {
        super.onStop()
        Logger.e("onStop: $tag")
    }

    /**
     * 当 Activity 被销毁时，onDestroy() 方法被调用。在这个阶段，你应该释放所有持有的资源，如线程、监听器等。
     */
    override fun onDestroy() {
        super.onDestroy()
        Logger.e("onDestroy: $tag")
    }

    /**
     * 在 Activity 之前已经停止，现在又要重新对用户可见时调用。
     */
    override fun onRestart() {
        super.onRestart()
        Logger.e("onRestart: $tag")
    }

    /**
     * 当 Activity 需要保存其状态以便在重新创建时能够恢复之前的状态时调用。
     * 例如，在设备配置改变（如屏幕旋转）时。
     */
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        Logger.e("onSaveInstanceState: $tag")
    }

    /**
     * 当 Activity 被重新创建后，用于恢复之前保存的状态。
     */
    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        Logger.e("onRestoreInstanceState: $tag")
    }

}




